"""

参考网址：https://docs.scipy.org/doc/scipy-1.0.0/reference/

包含的包：
    1、scipy.cluster：聚类算法
    2、scipy.constants：物理数学常量
    3、scipy.fftpack：快速傅里叶变换
    4、scipy.integrate：积分和常微分方程
    5、scipy.interpolate：插值法和平滑处理
    6、scipy.io：输入输出
    7、scipy.linalg：线性代数
    8、scipy.misc：杂项例程
    9、scipy.ndimage：N维图像处理
    10、scipy.odr：正交距离回归
    11、scipy.optimize：最优化
    12、scipy.signal：信号处理
    13、scipy.sparse：稀疏矩阵
    14、scipy.sparse.linalg：稀疏线性代数
    15、scipy.sparse.csgraph：压缩的稀疏图程序
    16、scipy.spatial：空间数据结构和算法
    17、scipy.special：特殊函数
    18、scipy.stats：统计方法
    19、scipy.stats.mstats：Masked Arrays的统计方法

"""


"""

    Part 5. scipy.interpolate

"""
# Lagrange插值法（Lagrange插值多项式）
# from scipy import interpolate
#
# x = [3, 6, 9]
# y = [10, 8, 4]
# result = interpolate.lagrange(x, y)
# print(result)
# print(result(10))


"""

    Part 12. scipy.signal：信号处理

"""
# 短时距傅里叶变换
import matplotlib.pyplot as plt
from scipy import signal
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

fs = 10e3
N = 1e5
amp = 2 * np.sqrt(2)

time = np.arange(N) / float(fs)
noise_power = 0.01 * fs / 2
mod = 500 * np.cos(2*np.pi*0.25*time)
carrier = amp * np.sin(2*np.pi*3e3*time + mod)
noise = np.random.normal(scale=np.sqrt(noise_power), size=time.shape)
noise *= np.exp(-time/5)
value = carrier + noise

f, t, Zxx = signal.stft(value, fs, nperseg=1000)
t, f = np.meshgrid(t, f)

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(t, f, Zxx, rstride=1, cstride=1, cmap='rainbow')
ax.set_title('短时傅里叶变换')
ax.set_xlabel('时间 [sec]')
ax.set_ylabel('频率 [Hz]')
ax.set_zlabel('结果')
plt.show()